home *** CD-ROM | disk | FTP | other *** search
- <?php
- /*
- +--------------------------------------------------------------------------+
- | phpMyBackupPro |
- +--------------------------------------------------------------------------+
- | Copyright (c) 2004-2005 by Dirk Randhahn |
- | http://www.phpMyBackupPro.net |
- | version information can be found in definitions.php. |
- | |
- | This program is free software; you can redistribute it and/or |
- | modify it under the terms of the GNU General Public License |
- | as published by the Free Software Foundation; either version 2 |
- | of the License, or (at your option) any later version. |
- | |
- | This program is distributed in the hope that it will be useful, |
- | but WITHOUT ANY WARRANTY; without even the implied warranty of |
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
- | GNU General Public License for more details. |
- | |
- | You should have received a copy of the GNU General Public License |
- | along with this program; if not, write to the Free Software |
- | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.|
- +--------------------------------------------------------------------------+
- */
-
- // login is not loaded, because of scheduled backups
- // session_start() is needed for multi db mode
- session_start();
- require_once("definitions.php");
-
- // used variables
- if (!isset($argv)) $argv=FALSE;
- if (!isset($_POST['db'])) $_POST['db']=FALSE;
- if (!isset($_POST['tables'])) $_POST['tables']=FALSE;
- if (!isset($_POST['data'])) $_POST['data']=FALSE;
- if (!isset($_POST['zip'])) $_POST['zip']=FALSE;
- if (!isset($_POST['drop'])) $_POST['drop']=FALSE;
- if (!isset($_POST['man_dirs'])) $_POST['man_dirs']=FALSE;
- if (!isset($_POST['comments'])) $_POST['comments']=FALSE;
-
- // session
- if (!isset($_SESSION['LOGGED_IN'])) $_SESSION['LOGGED_IN']=FALSE;
-
- // is shell mode or web-based mode or export-script mode used or is user not logged in?
- if ($argv) {
- echo "+======>\n| phpMyBackupPro ".PMBP_VERSION." (c)2004-2005 by Dirk Randhahn\n| ".PMBP_WEBSITE."\n+======>\n";
- if (!isset($argv[1])) {
- echo PMBP_EX_NO_ARGV;
- exit;
- }
- $mode="shell";
- $_POST['db']=$argv[1];
- if (isset($argv[2])) {
- if ($argv[2]) $_POST['tables']="on"; else $_POST['tables']="off";
- } else $_POST['tables']="off";
- if (isset($argv[3])) {
- if ($argv[3]) $_POST['data']="on"; else $_POST['data']="off";
- } else $_POST['data']="off";
- if (isset($argv[4])) {
- if ($argv[4]) $_POST['drop']="on"; else $_POST['drop']="off";
- } else $_POST['drop']="off";
- if (isset($argv[5])) {
- if ($argv[5]) $_POST['zip']="gzip"; else $_POST['zip']="off";
- } else $_POST['zip']="off";
- if (isset($argv[6])) $_POST['man_dirs']=$argv[6]; else $_POST['man_dirs']=FALSE;
-
- // backups get only triggered if security key is set right
- // older versions of the backup script hould not cause error output, but will no trigger backups!
- } elseif (isset($security_key) || (substr(PMBP_VERSION,4)<6 && isset($_GET['incl']))) {
- $mode="incl";
- if(!isset($_SESSION['wss'])) $_SESSION['wss']=-1;
- // is a databse or a file directory selected?
- if ($_POST['db'] || isset($_POST['dirs']) || strlen($_POST['man_dirs'])) {
- // backups can only be triggered with the right security key!
- if ($security_key==$PMBP_SYS_VAR['security_key']) {
- // add new 'last_scheduled' system variables if it does not exist for the current account
- if ($_SESSION['wss']>=0) {
- if (!isset($PMBP_SYS_VAR['last_scheduled_'.$_SESSION['wss']])) $PMBP_SYS_VAR['last_scheduled_'.$_SESSION['wss']]=0;
- }
-
- // check if it is already time for a new backup
- if ( ($_SESSION['wss']<0 && $PMBP_SYS_VAR['last_scheduled']>(time()-$period) ) ||
- ($_SESSION['wss']>=0 && $PMBP_SYS_VAR['last_scheduled_'.$_SESSION['wss']]>(time()-$period)) ) {
- if($PMBP_SYS_VAR['scheduled_debug'])
- echo "It's not time for a new backups yet! Set period to 'At each call' for debugging.<br>\n";
- return FALSE;
- }
- } else {
- if($PMBP_SYS_VAR['scheduled_debug'])
- echo "The security key is wrong. It must have the same value as in global_conf.php. Create a new script!<br>\n";
- return FALSE;
- }
- } else {
- if($PMBP_SYS_VAR['scheduled_debug'])
- echo "No database or directory was selected to backup.<br>\n";
- return FALSE;
- }
- } else {
- $mode="web";
- include("login.php");
- }
-
- // set the timelimit
- @set_time_limit($CONF['timelimit']);
- @ignore_user_abort(TRUE);
-
- // print html if web mode
- if ($mode=="web") {
- PMBP_print_header(ereg_replace(".*/","",$_SERVER['SCRIPT_NAME']));
-
- // if first use or no db-connection possible
- if (!@mysql_connect($CONF['sql_host'],$CONF['sql_user'],$CONF['sql_passwd'])) echo "<div class=\"red\">".I_SQL_ERROR."</div><br>\n";
-
- // check if ftp connection is possible
- if ($CONF['ftp_use'] || $CONF['dir_backup']) {
- if (!$CONF['ftp_server']) {
- echo "<div class=\"red\">".C_WRONG_FTP."</div>";
- } elseif (!$conn_id=@ftp_connect($CONF['ftp_server'],$CONF['ftp_port'])) {
- echo "<div class=\"red\">".F_FTP_1." '".$CONF['ftp_server']."'!</div>";
- }
- }
- }
-
- // if pressed 'backup' backup the db
- if ($_POST['db'] || isset($_POST['dirs']) || strlen($_POST['man_dirs'])) {
- $out="";
-
- // get start time to calculate duration
- if (function_exists("microtime")) {
- $microtime=explode(" ",microtime());
- $starttime=($microtime[0]+$microtime[1]);
- } else {
- $starttime=time();
- }
-
- // delete old backup files
- PMBP_get_backup_files();
-
- // save PMBP_SYS_VARS
- if ($mode=="web") PMBP_save_export_settings();
-
- // in shell mode the dbs must be seperated with commas
- if ($mode=="shell") $db_list=explode(",",$_POST['db']);
- elseif(!isset($_POST['db'][0])) $db_list=FALSE;
- else $db_list=$_POST['db'];
-
- // get all available databases
- $available_dbs=PMBP_get_db_list();
-
- // is a database selected?
- if ($db_list) {
- foreach($db_list as $export_db) {
-
- // check if $export_db is available
- if (in_array($export_db,$available_dbs)) {
-
- // generate db dump
- $backupfile=PMBP_dump($export_db,($_POST['tables']=="on"),($_POST['data']=="on"),($_POST['drop']=="on"),$_POST['zip'],$_POST['comments']);
-
- // is there no db connection or a not existing db?
- if ($backupfile && $backupfile!=="DB_ERROR") {
- // change mod to 0777
- chmod("./".PMBP_EXPORT_DIR.$backupfile,0777);
-
- // remind filenames if backup by ftp or email is selected
- if (($CONF['email_use'] && function_exists("mail")) || ($CONF['ftp_use'] && function_exists("ftp_connect"))) $store_files[]=$backupfile;
-
- if ($mode=="web") echo "<div class=\"green\">".EX_SAVED." ".$backupfile."</div>\n";
- elseif ($mode=="shell") echo EX_SAVED." ".$backupfile."\n";
- elseif($mode=="incl") $out.=EX_SAVED." ".$backupfile."<br>\n";
- } elseif($backupfile==="DB_ERROR") {
- if ($mode=="web") echo "<div class=\"red\">".C_WRONG_SQL."</div>\n";
- elseif ($mode=="shell") echo C_WRONG_SQL."\n";
- elseif($mode=="incl") $out.=C_WRONG_SQL."<br>\n";
- } else {
- if ($mode=="web") printf("<div class=\"red\">".EX_NOT_SAVED."</div>\n",$export_db);
- elseif ($mode=="shell") printf(EX_NOT_SAVED."\n",$export_db);
- elseif($mode=="incl") $out.=sprintf(EX_NOT_SAVED."<br>\n",$export_db);
- }
-
- } else {
- if ($mode=="web") printf("<div class=\"red\">".PMBP_EX_NO_AVAILABLE."</div>\n",$export_db);
- elseif ($mode=="shell") printf(PMBP_EX_NO_AVAILABLE."\n",$export_db);
- elseif($mode=="incl") $out.=sprintf(PMBP_EX_NO_AVAILABLE."<br>\n",$export_db);
- }
- }
- } else {
- if ($mode=="web") echo "<div class=\"red\">".EX_NO_DB."</div><br>\n";
- elseif ($mode=="shell") echo EX_NO_DB."\n";
- elseif ($mode=="incl") $out.=EX_NO_DB."<br>\n";
-
- }
-
- // start backup using ftp or email
- $backup_info=array("comments"=>$_POST['comments'],"tables"=>($_POST['tables']=="on"),"data"=>($_POST['data']=="on"),"drop"=>($_POST['drop']=="on"),"comp"=>$_POST['zip']);
- if ($CONF['ftp_use'] && isset($store_files)) $out=PMBP_ftp_store($store_files)."\n";
- if ($CONF['email_use'] && isset($store_files)) $out.=PMBP_email_store($store_files,$backup_info);
-
- // file backup per FTP
- if ($CONF['dir_backup'] && (isset($_POST['dirs']) || strlen($_POST['man_dirs']))) {
- $_POST['man_dirs']= str_replace("\n",",",$_POST['man_dirs']);
- $files=array();
- if (isset($_POST['dirs'])) {
- $_POST['dirs']=array_merge(explode(",",$_POST['man_dirs']),$_POST['dirs']);
- foreach($_POST['dirs'] as $dir) $files=array_merge($files,PMBP_get_files($dir));
- } else {
- foreach(explode("|",$_POST['man_dirs']) as $dir) $files=array_merge($files,PMBP_get_files($dir));
- }
- $out.=PMBP_save_FTP($files);
- }
-
- // show execution duration
- if (function_exists("microtime")) {
- $microtime=explode(" ",microtime());
- $endtime=($microtime[0]+$microtime[1]);
- } else {
- $endtime=time();
- }
-
- if ($mode=="web") {
- echo $out."\n";
- echo "<div class=\"bold\">".F_DURATION.": ".number_format($endtime-$starttime,3)." ".F_SECONDS."</div>\n";
- } elseif ($mode=="shell") {
- echo $out;
- echo F_DURATION.": ".number_format($endtime-$starttime,3)." ".F_SECONDS;
- } elseif($mode=="incl") {
- if ($PMBP_SYS_VAR['scheduled_debug']) {
- echo $out;
- echo F_DURATION.": ".number_format($endtime-$starttime,3)." ".F_SECONDS;
- }
- }
-
- // show the form for selecting a db to backup
- } elseif (!$_POST['db'] && $mode=="web") {
- echo "<form action=\"backup.php\" method=\"post\" name=\"backup\">\n<div>\n";
- PMBP_print_export_form();
- echo "\n<input type=\"submit\" value=\"".EX_EXPORT."\" class=\"button\">\n</div>\n</form>\n";
- }
-
- // update file list (deletes new generated files if $CONS[del_numer]=0)
- PMBP_get_backup_files();
-
- // print html if web mode
- if ($mode=="web") {
- PMBP_print_footer();
- } elseif ($mode=="incl") {
- // save the new timestamp
- if ($_SESSION['wss']<0) {
- $PMBP_SYS_VAR['last_scheduled']=time();
- } else {
- $PMBP_SYS_VAR['last_scheduled_'.$_SESSION['wss']]=time();
- }
- // update global_conf.php
- PMBP_save_global_conf();
- return TRUE;
- }
- ?>
-